/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sgs.mb;

import br.com.sgs.bundle.MessageBundleLoader;
import br.com.sgs.entity.Etapa;
import br.com.sgs.entity.ModeloSolicitacao;
import br.com.sgs.fachada.EtapaFachada;
import br.com.sgs.fachada.EtapaIFachada;
import br.com.sgs.fachada.Fachada;
import br.com.sgs.fachada.IFachada;
import br.com.sgs.view.EtapaConverter;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author Eric
 */
@ManagedBean(name="modeloSolicitacaoNewMB")
@ViewScoped
public class ModeloSolicitacaoNewMB implements Serializable {
   
    @ManagedProperty(value = "#{loginMB}")
    private LoginMB lmb;
    
    //Campos que receberão as informações de Statuss
    private String descricao;
    
    //Objetos de staatus
    private Etapa etapaselecionada;
    private List<Etapa> lsetapa = new ArrayList<Etapa>();
    private String stretapadescricao;
    private String etapabusca;
    private List<Etapa> etapas;
  

    /**
     * Creates a new instance of CampusNewMB
     */
    
    
    public ModeloSolicitacaoNewMB() {
    }
    
    @PostConstruct
    public void init() {
        etapas = EtapaConverter.etapaDB;
    }

    public String salvar() {     
        try {
            
            ModeloSolicitacao modelosolicitacao = new ModeloSolicitacao();
            
            modelosolicitacao.setDescricao(descricao);
            modelosolicitacao.setDtcriacao(new Date());
                        
            for (Etapa etapa : lsetapa) {
                modelosolicitacao.getLsetapa().add(etapa);
            }
            
            IFachada ifach = new Fachada();
            ifach.inserir(modelosolicitacao);
            
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, MessageBundleLoader.getMessage("msgSalvoSucesso"), ""));
          
            return "SOLICITACAOLIST";

        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, MessageBundleLoader.getMessage("erroNaoEncontrado"), ""));
            e.printStackTrace();        
            return null;
        } 
    }
    
    public void limparCampos() {
        try {

            descricao = "";
            
        } catch (Exception e) {
            System.err.println("Erro no limparCampos");
        }
    }   
    
    public String voltar() {
        try {
            return "SOLICITACAOLIST";
        } catch (Exception e) {
            System.err.println("Erro no método voltar");
            return null;
        }
    }
    
    public void buscarEtapa() {
        try {
            
            EtapaIFachada ifach = new EtapaFachada();
            lsetapa = ifach.findEtapaByDescricao(descricao);
            
        } catch (Exception e) {
            System.err.println("Erro no método buscarEtapa");
        }
    }

    public void removerEtapa(Etapa etapa) {
        try {
            lsetapa.remove(etapa);
        } catch (Exception e) {
            System.err.println("Erro no método removerEtapa");
        }
    }

    public void adicionarEtapa() {
        try {

            System.out.println(etapaselecionada.getDescricao());
            lsetapa.add(etapaselecionada);
        } catch (Exception e) {
            System.err.println("Erro no metodo adicionarEtapa");
        }

    }

    public List<Etapa> completeEtapa(String query) {        
        List<Etapa> suggestions = new ArrayList<Etapa>();        
        
        for (Etapa e : etapas) {            
            if (e.getDescricao().startsWith(query)) {
                suggestions.add(e);
            }            
        }        
        
        return suggestions;        
    }
    
    /**
     * @param lmb the lmb to set
     */
    public void setLmb(LoginMB lmb) {
        this.lmb = lmb;
    }

    /**
     * @return the descricao
     */
    public String getDescricao() {
        return descricao;
    }

    /**
     * @param descricao the descricao to set
     */
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    /**
     * @return the lmb
     */
    public LoginMB getLmb() {
        return lmb;
    }

    /**
     * @return the etapaselecionada
     */
    public Etapa getEtapaselecionada() {
        return etapaselecionada;
    }

    /**
     * @param etapaselecionada the etapaselecionada to set
     */
    public void setEtapaselecionada(Etapa etapaselecionada) {
        this.etapaselecionada = etapaselecionada;
    }

    /**
     * @return the lsetapa
     */
    public List<Etapa> getLsetapa() {
        return lsetapa;
    }

    /**
     * @param lsetapa the lsetapa to set
     */
    public void setLsetapa(List<Etapa> lsetapa) {
        this.setLsetapa(lsetapa);
    }

    /**
     * @return the stretapadescricao
     */
    public String getStretapadescricao() {
        return stretapadescricao;
    }

    /**
     * @param stretapadescricao the stretapadescricao to set
     */
    public void setStretapadescricao(String stretapadescricao) {
        this.stretapadescricao = stretapadescricao;
    }

    /**
     * @return the etapabusca
     */
    public String getEtapabusca() {
        return etapabusca;
    }

    /**
     * @param etapabusca the etapabusca to set
     */
    public void setEtapabusca(String etapabusca) {
        this.etapabusca = etapabusca;
    }

    /**
     * @return the etapas
     */
    public List<Etapa> getEtapas() {
        return etapas;
    }

    /**
     * @param etapas the etapas to set
     */
    public void setEtapas(List<Etapa> etapas) {
        this.etapas = etapas;
    }
}
